// 代码段1 (正常)
// 定义函数时, 顺手就限制了返回值.
function demo(): void {
  // 返回 undefined 合法
  return undefined

  // 以下返回均不合法
  // return 100
  // return false
  // return null
  // return []
}

demo()

// 代码段2(特殊)
// 
type LogFunc = () => void // 自定义类型, 类型是函数, 参数和返回值都限制了

// LogFunc = function() {}  // 不能对类型赋值

const f1: LogFunc = () => {
  return 100; // 允许返回非空值
}

const f2: LogFunc = () => 200;  // 允许返回非空值

const f3: LogFunc = function () {
  return 300 // 允许返回非空值
}

const src = [1, 2, 3]
const dst = [0];
src.forEach((el) => dst.push(el))

// (method) Array<number>.forEach(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any): void
// callbackfn: (value: number, index: number, array: number[]) => void

let x = f1()
console.log(x)

// if(x) { }  // 无法测试 "void" 类型的表达式的真实性。